package web.actions;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import compartido.Usuario;

import repositorioJuego.IRepositorioJuego;
import repositorioJuego.RepositorioJuegoEnMemoria;

import web.forms.LoginForm;

public class LoginAction extends DispatchAction{
	
	protected IRepositorioJuego getRepositorio() {
		double velocidadMax = 80;
		servlet.getServletContext().setAttribute("VelocidadMaxima", velocidadMax);
		IRepositorioJuego repositorio = (IRepositorioJuego) servlet.getServletContext().getAttribute("IRepositorioJuego");
		if (repositorio == null){
			
		/*	String root = this.servlet.getServletContext().getRealPath("/");
			String separador = File.separator;
			String directorio = root + separador + "repositorio" + separador; 
			
			RepositorioJuego.setDirectorio(directorio);
			repositorio = RepositorioJuego.getInstancia();*/
			repositorio = RepositorioJuegoEnMemoria.getRepositorioJuego();
			servlet.getServletContext().setAttribute("IRepositorioJuego", repositorio);
		}
		return repositorio;
	}
	
	/**Pagina inicial de login*/
	public ActionForward inicio(
		    ActionMapping mapping, 
		    ActionForm form, 
		    HttpServletRequest request, 
		    HttpServletResponse response) {
		getRepositorio();
		return mapping.findForward("success");
	}
	
	/**Valida usuario y password*/
	public ActionForward aceptar(
		    ActionMapping mapping, 
		    ActionForm form, 
		    HttpServletRequest request, 
		    HttpServletResponse response) throws Exception{
		
		IRepositorioJuego repositorio = getRepositorio();
		LoginForm loginForm = (LoginForm)form;
		ActionErrors errors = new ActionErrors();
		errors = loginForm.validate(mapping, request);
		if (errors.isEmpty()){
			Usuario entrante = new Usuario(loginForm.getUsuario(), loginForm.getPassword());
			Usuario buscado = repositorio.getUsuario(loginForm.getUsuario());
			if ( (buscado != null) && (buscado.compareTo(entrante) == 0) ) {
				request.getSession().setAttribute("usuario", loginForm.getUsuario());
				return mapping.findForward("verCarreras");
			}
			else{
				ActionError error = new ActionError("error.login.invalido");
		        errors.add("ErrorLogin", error);
		        saveErrors(request, errors);
				return mapping.findForward("success");
			}
		}else {
			return mapping.findForward("success");
			}	
	}	
	    
    /**Hace el logOff y luego muetra la pagina de login*/
    public ActionForward logOff(
            ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request, 
            HttpServletResponse response) throws Exception{
    	request.getSession().removeAttribute("usuario");

        return mapping.findForward("success");
    }

}
